/** ==================================================================================== **/
/** 			Definizione della direttiva "Filtro mappa nella ricerca" ...			 **/
/** ==================================================================================== **/

 var ngTemplateMappaRicerca = 
	 		"<div class=\"map-form-ricerca pull-right nop {{ngOpen ? 'fullH col-md-8' : ''}}\" >" +

	 			/* overlay img fake */
				"<div class='overlayer' ng-click='overlayFitroRcMappa()' >" +
					"<i class='fa fa-map-o'></i> {{'MappaRicerca.overlay.label' | translate}}" +
				"</div>" +
				
				/* img fake della mappa */
				"<img ng-show='ngShowfakeMap' class='poster' ng-src='{{ngImgFakeMappa}}' />" +
			
				/* div della mappa reale */
				"<div ng-hide='ngHiderealMap' class='container'>" +
					
					/* btn chiudi mappa **/
					"<button ng-click='chiudiFitroRcMappa()' class='closeMappaRc' type='button' title=\"{{'MappaRicerca.close.label' | translate }}\">X</button>" +
					
					/* mappa */
					"<div id='mapRc' class='map mapricerca' ngeo-map='olMapRc' tabindex='0' ></div>" + 
					
					"<div ngeo-btn-group>" +
					
						/* Strumento poligono */
						"<div ngeo-btn ngeo-control='drawPolygonControl' ng-click='ngClickPolygonControl()' " +
							 "ngeo-control-map='olMapRc' ng-model='drawPolygonInteraction.active' " +
							 "class=\"{{drawPolygonInteraction.active ? 'ol-selectable' : 'ol-unselectable'}}\"></div> " +
						 
						/* Strumento cerchio */
						"<div ngeo-btn ngeo-control='drawCircleControl' ng-click='ngClickCircleControl()' " +
							 "ngeo-control-map='olMapRc' ng-model='drawCircleInteraction.active' " +
							 "class=\"{{drawCircleInteraction.active ? 'ol-selectable' : 'ol-unselectable'}}\"></div> " +
							 
						/* Strumento cursore */
						"<div ngeo-btn ngeo-control='modifyControl' ng-click='ngClickModifyControl()' " +
							 "ngeo-control-map='olMapRc' ng-model='selectInteraction.active' " +
							 "class=\"{{selectInteraction.active ? 'ol-selectable' : 'ol-unselectable'}}\"></div> " +
									 
					"</div>" + 
					
					/* Strumento cancella */
					"<div ngeo-control='cancelControl' ng-click='ngClickCancelControl()' ngeo-control-map='olMapRc'></div> "+
						 
				"</div>" + 
			"</div>";
 
/**
 * USO:
 *  È necessario includere nella pagina, in cui si vuole rendere disponibile la mappa come filtro di ricerca, la seguente direttiva:
 *  
 *   (code)
 *   	<widget-map-ricerca api="apimaprc"></widget-map-ricerca>
 *   (code)
 *   
 * COSA FA:
 *  La direttiva crea il componente per disegnare su mappa la geometria di un'area, che sarà poi uno dei filtri della ricerca per 
 *  anagrafica.
 *  La direttiva mette a disposizione tre funzioni accessibili da un controller esterno tramite l'attributo della direttiva "api":
 *   1. "resetMap": svuota la mappa da eventuali geometrie disegnate e disattiva tutti i controlli.
 *   2. "geometryAsWkt": restituisce il WKT della geometria disegnata, altrimenti ritorna null.
 *   3. "geometryAsGeom": restituisce la geometry della geometria disegnata, altrimenti ritorna null.
 */
BootApplication.directive('widgetMapRicerca',
	["configuration", "olMapsInst", "olBuildService", "olControlService", "olInteractionService", "olLayerService", "olFormatService", "ngeoToolActivateMgr", 
	 "ngeoDecorateInteraction", "$translate", "$timeout",
    function(appConstants, olMapsInst, olBuildService, olControlService, olInteractionService, olLayerService, olFormatService, ngeoToolActivateMgr, 
    ngeoDecorateInteraction, $translate, $timeout) {
			
	return {
        restrict: 'EA',
        template: ngTemplateMappaRicerca,
        replace: true,
		scope: {
			api : "="
	    },
	    link: function (scope, element, attrs) {
	    	   
  /** ======================================================================================== **/
  /**  									ABILITA/DISABILITA TOOL								   **/
  /** ======================================================================================== **/
	    	   
	    	/**
	    	 * Gestisce l'apertura e l'attivazione della mappa per il disegno nelle form di ricerca
	    	 */
	    	scope.overlayFitroRcMappa = function(){
	    		/** Nascondo l'immagine fake della mappa  */
	    		scope.ngShowfakeMap = false;
	    		/** Mostro il div contenitore della mappa reale. */
	    		scope.ngHiderealMap = false;
	    		/** segnalo la mappa come attiva in promo piano **/
	    		scope.ngOpen = true;
	    		
	    		$timeout(function() {
	    			/** refresh mappa **/
	  				scope.onResize();
                });
	    	}// close overlayFitroRcMappa
	    	/**
	    	 * Gestisce la chiusura e la disattivazione della mappa per il disegno nelle form di ricerca
	    	 */
	    	scope.chiudiFitroRcMappa = function(){
	    		/** Mostro il div contenitore della mappa reale. */
	    		scope.ngHiderealMap = true;
	    		/** Nascondo l'immagine fake della mappa */
	    		scope.ngShowfakeMap = true;
	    		/** segnalo la mappa com non più attiva **/
	    		scope.ngOpen = false;
	    	}// close chiudiFitroRcMappa
	    	/**
			 * Eliminazione geometria disegnata e disattivazione dei controlli
			 */
	    	scope.resetMappa = function () {
	    		/** Quando inizio a disegnare svuoto il layer dall'ultima feature disegnata. */
				if( scope.vector != null ) scope.vector.getSource().clear();
				/** Quando inizio a disegnare elimino le feature eventualmente selezionate. */
  				if( scope.selectInteraction != null ) scope.selectInteraction.getFeatures().clear();
  				
				/** disattivo i controlli **/
	  			scope.drawPolygonInteraction.active = false;
	  			scope.drawCircleInteraction.active = false;
	  			scope.selectInteraction.active = false;
	  			
	  			/** rimuovo le interaction per l'edit dalla mappa **/
  				scope.olMapRc.removeInteraction(scope.modifyInteraction);
  				scope.olMapRc.removeInteraction(scope.selectInteraction);
	  			
	  			/** Disattivo l'evento. */
	      		scope.olMapRc.un('pointermove', pointerMoveHandler);
	      		/** Remove help tooltip */
	      		scope.removeHelpTooltip();
	      		/** unset sketch **/
		        scope.ngSketchFeature = null;

		        /** ricentro la mappa */
		        scope.olMapRc.getView().setCenter(olFormatService.olProjTransorm(
		        		scope.olMapRc.getOptions().getCenter()[0], scope.olMapRc.getOptions().getCenter()[1], scope.olMapRc.getOptions().getSourceProjection(), scope.olMapRc.getOptions().getDestProjection()));
				
		        /** porto la mappa allo zoom iniziale */
		        scope.olMapRc.getView().setZoom(scope.olMapRc.getOptions().getZoom());
				
		        /** refresh mappa **/
  				scope.onResize();
	    	}// close resetMappa
	    	
  /** ======================================================================================== **/
  /**  											RESIZE MAPPA								   **/
  /** ======================================================================================== **/
	    	   
	    	/**
	    	 * Gestisce resize mappa
	    	 */
	    	scope.onResize = function (){
	    		scope.olMapRc.updateSize();
	    		scope.olMapRc.render();
	    	}
	    	/**
	    	 * Gestione evento di resize del DIV della direttiva
	    	 */
	    	scope.$watch( function() {
	    		scope.__width = element.width();
	        });
	    	scope.$watch('__width', function( newHeight, oldHeight ) {
	    		scope.onResize();
	    	});
	    	/**
	    	 * Gestione evento di resize della finestra del browser
	    	 */
	    	$(window).bind('resize', function(){
	    		scope.onResize();
	    	});
	    	
  /** ======================================================================================== **/
  /**  									EVENTI INTERACTION MAPPA							   **/
  /** ======================================================================================== **/
	    		    	
	    	/** 
	    	 * Funzione richiamata quando viene lanciato l'evento di "drawstart". Viene cancellata l'ultima feature eventualmente
	    	 * disegnata dalla mappa e dall'attributo della direttiva. 
	    	 */
	    	scope.drawStart_ = function (e){
	    		/** set sketch per l'help tooltip **/
	            scope.ngSketchFeature = e.feature;
	            
	    		/** Quando inizio a disegnare svuoto il layer dall'ultima feature disegnata. */
  				if( scope.vector != null ) scope.vector.getSource().clear();
  				/** Quando inizio a disegnare elimino le feature eventualmente selezionate. */
  				if( scope.selectInteraction != null ) scope.selectInteraction.getFeatures().clear();
  				
  				/** rimuovo le interaction per l'edit dalla mappa **/
  				scope.olMapRc.removeInteraction(scope.modifyInteraction);
  				scope.olMapRc.removeInteraction(scope.selectInteraction);
  				
  				/** refresh mappa **/
  				scope.onResize();
	    	}
	    	/** 
	    	 * Funzione richiamata quando viene lanciato l'evento di "drawend", l'evento è intercettato prima che la feature
	    	 * venga inserita al layer.
	    	 */
	    	scope.drawEnd_ = function (e){
	    		/** unset sketch **/
	            scope.ngSketchFeature = null;
	    	}
	    	
	    	/** Triggered upon feature draw start **/
	    	scope.drawPolygonInteraction.on('drawstart', function (e) { scope.drawStart_(e); });
	    	scope.drawCircleInteraction.on('drawstart', function (e) { scope.drawStart_(e); });
	    	
  			/**  Triggered upon feature draw end **/
	    	scope.drawPolygonInteraction.on('drawend', function (e) { scope.drawEnd_(e); });
	    	scope.drawCircleInteraction.on('drawend', function (e) { scope.drawEnd_(e); });
    		
  /** ======================================================================================== **/
  /**  										  TOOLTIP MAPPA									   **/
  /** ======================================================================================== **/
    			
    		/**
    		 * Handle pointer move.
    		 * @param {ol.MapBrowserEvent} evt
    		 */
    		var pointerMoveHandler = function(evt) {
    			if (evt.dragging) return;
    			
	    		/** @type {string} */
    			var helpMsg = scope.startMsg;
    			/** @type {ol.Coordinate|undefined} */
    			var tooltipCoord = evt.coordinate;

	    		if (scope.ngSketchFeature) {
	    			/** caso in cui è già stato diseganto un punto in mappa **/
	    			var geom = scope.ngSketchFeature.getGeometry();
	    			
	    			if (geom instanceof ol.geom.Polygon) helpMsg = scope.continuePolygonMsg;
	    			if (geom instanceof ol.geom.Circle)  helpMsg = scope.continueCircleMsg;
	    		}
	    		
	    		scope.helpTooltipElement.innerHTML = helpMsg;
	    		scope.helpTooltip.setPosition(tooltipCoord);
    		};
    		/**
    		 * Creates a new help tooltip
    		 */
    		scope.createHelpTooltip = function() {
    			/** se gia c'è rimuovo gli elementi html **/
    			if (scope.helpTooltipElement) scope.helpTooltipElement.parentNode.removeChild(scope.helpTooltipElement);

    			/** creo il DIV per il tooltip **/
    			scope.helpTooltipElement = document.createElement('div');
    			scope.helpTooltipElement.className = 'tooltip';
    			
    			/** 
    			 * Overlay per mostrare l'help messages.
    			 * NOTA "Overlay":
    			 *   Un elemento da visualizzare sulla mappa e collegata a una singola posizione sulla mappa.
    			 *   Come ol.control.Control, overlay sono i widget visibili. A differenza dei controlli, non sono in una posizione fissa 
    			 *   sullo schermo, ma sono legati a delle coordinate geografiche.
    			 */
    			scope.helpTooltip = new ol.Overlay({
	    		    element: scope.helpTooltipElement,
	    		    offset: [15, 0],
	    		    positioning: 'center-left'
    			});
    			scope.olMapRc.addOverlay(scope.helpTooltip);
    		}// close createHelpTooltip
    		/**
    		 * Remove help tooltip
    		 */
    		scope.removeHelpTooltip = function() {
    			/** Rimuovere l'overlay dell'help message dalla mappa. **/
    			scope.olMapRc.removeOverlay(scope.helpTooltip);
    			  
    			if (scope.helpTooltipElement !== null) scope.helpTooltipElement.parentNode.removeChild(scope.helpTooltipElement);
    			
    			/** unset help element **/
    			scope.helpTooltipElement = null;
    		    scope.helpTooltip = null;
        		/** unset sketch **/
	            scope.ngSketchFeature = null;
	            /** Disattivo l'evento. */
        		scope.olMapRc.un('pointermove', pointerMoveHandler );
    		}// close removeHelpTooltip
    		
  /** ======================================================================================== **/
  /**  										CLICK CONTROL BUTTON							   **/
  /** ======================================================================================== **/
    		
    		/** 
	    	 * Funzione richiamata al click del control button (Draw polygon).
	    	 */
	    	scope.ngClickPolygonControl = function (){
        		/** Remove help tooltip */
        		scope.removeHelpTooltip();
        		
	    		if(scope.drawPolygonInteraction.active){
	    			/** Attivato quando un puntatore viene spostato. */
	        		scope.olMapRc.on('pointermove', pointerMoveHandler );
	        		/** Creates a new help tooltip */
	        		scope.createHelpTooltip();
	    		}
	    	}// close ngClickPolygonControl
	    	/** 
	    	 * Funzione richiamata al click del control button (Circle polygon).
	    	 */
	    	scope.ngClickCircleControl = function (){
        		/** Remove help tooltip */
        		scope.removeHelpTooltip();
        		
	    		if(scope.drawCircleInteraction.active){
	    			/** Attivato quando un puntatore viene spostato. */
	        		scope.olMapRc.on('pointermove', pointerMoveHandler );
	        		/** Creates a new help tooltip */
	        		scope.createHelpTooltip();
	    		}
	    	}// close ngClickCircleControl
	    	/** 
	    	 * Funzione richiamata al click del control button (Edit geometry).
	    	 */
	    	scope.ngClickModifyControl = function (){
        		/** Remove help tooltip */
        		scope.removeHelpTooltip();
        		
        		if(scope.selectInteraction.active){
        			if(scope.vector != null){
    					/** mi prendo le features **/
    	  				var features = scope.vector.getSource().getFeatures();
    						
    	  				/** controllo che ci sia una feature da salvare **/
    	  				if(features != null && features.length != 0){
    	  					/** 
    	  					 * Una geometria di tipo ol.geom.Circle non è gestita dall'edit 
    	  					 * quindi se è questo il caso la trasformo in ol.geom.Polygon
    	  					 */
    	  					if (features[0].getGeometry() instanceof ol.geom.Circle)
    	  						features[0].setGeometry(ol.geom.Polygon.fromCircle(features[0].getGeometry()));
    	  				}// close
    	  			}// close
        			/** aggiungo le interaction per l'edit dalla mappa **/
        			scope.olMapRc.addInteraction(scope.selectInteraction);
      				scope.olMapRc.addInteraction(scope.modifyInteraction);
        		}else{
        			/** rimuovo le interaction per l'edit dalla mappa **/
      				scope.olMapRc.removeInteraction(scope.modifyInteraction);
      				scope.olMapRc.removeInteraction(scope.selectInteraction);
        		}
	    	}// close ngClickModifyControl
	    	/** 
	    	 * Funzione richiamata al click del control button (Cancel geometry).
	    	 */
	    	scope.ngClickCancelControl = function (){
	    		/**
				 * Eliminazione geometria disegnata e disattivazione dei controlli
				 */
	    		scope.resetMappa();
	    	}//close ngClickCancelControl
	    	
  /** ======================================================================================== **/
  /**  										 FUNCTION PUBBLICHE								   **/
  /** ======================================================================================== **/
	    	
	    	scope.api = {
		    	/** 
		    	 * Viene eliminata l'eventuale feature disegnata e disattivati i controlli.
		    	 */
	    		resetMap : function () {
					/**
					 * Eliminazione geometria disegnata e disattivazione dei controlli
					 */
		  			scope.resetMappa();
		  		},
		    	/** 
		    	 * Ritorna il WKT della geometria disegnata, altrimenti null.
		    	 */
		  		geometryAsWkt : function () {
		  			
		  			if(scope.vector != null){
						/** mi prendo le features **/
		  				var features = scope.vector.getSource().getFeatures();
							
		  				/** controllo che ci sia una feature da salvare **/
		  				if(features != null && features.length != 0){
		  					var temp = features[0].clone();
		  					/** get geometry **/
		  					var geometry = temp.getGeometry().transform(appConstants.getParam("Constants").DEST_PROJECTION, appConstants.getParam("Constants").SOURCE_PROJECTION);
		  					
		  					if (geometry instanceof ol.geom.Circle) geometry = ol.geom.Polygon.fromCircle(geometry);
		  					
		  					/** rappresentazione in formato wkt della geometria **/
		  					var wkt = olFormatService.olWktTransorm(geometry);
								
							/** valorizzo la varibile con il formato WKT della geometria disegnata **/
				  			return wkt;
						}else
						   /** valorizzo la varibile con il formato WKT della geometria disegnata **/
						   return null;
					}else
					   /** valorizzo la varibile con il formato WKT della geometria disegnata **/
					   return null;
		  		},// close geometryRcAsWkt
		  		
		    	/** 
		    	 * Ritorna la geometry della geometria disegnata, altrimenti null.
		    	 */
		  		geometryAsGeom : function () {
		  			
		  			if(scope.vector != null){
						/** mi prendo le features **/
		  				var features = scope.vector.getSource().getFeatures();
							
		  				/** controllo che ci sia una feature da salvare **/
		  				if(features != null && features.length != 0){
		  					var temp = features[0].clone();
		  					/** get geometry **/
		  					var geometry = temp.getGeometry().transform(appConstants.getParam("Constants").DEST_PROJECTION, appConstants.getParam("Constants").SOURCE_PROJECTION);
								
			    			if (geometry instanceof ol.geom.Circle) geometry = ol.geom.Polygon.fromCircle(geometry);
			    			
							/** valorizzo la varibile con il formato WKT della geometria disegnata **/
				  			return geometry;
						}else
						   /** valorizzo la varibile con il formato WKT della geometria disegnata **/
				  		   return null;
					}else
					   /** valorizzo la varibile con il formato WKT della geometria disegnata **/
			  		   return null;
		  		}// close geometryAsGeom
		  		
	    	}// close api
	    },
        controller: ["$scope", function($scope) {
        	/**
	    	 * Inizializzazione interfaccia
	    	 */
	    	$scope.ngImgFakeMappa = appConstants.getParam("Constants").ContextPath + "smb/images/map/mappa.png";
	    	/** Nasconde la mappa reale **/
	    	$scope.ngHiderealMap = true;
	    	/** Rende visibile l'immaggine della mappa finta **/
	    	$scope.ngShowfakeMap = true;
	    	/** Individua se il tool della mappa è attivo o meno **/
	    	$scope.ngOpen = false;
	    	
	    	/** Feature disegnata dall'interaction. */
	    	$scope.ngSketchFeature;
	    	/** help tooltip element. */
	    	$scope.helpTooltipElement = null;
	    	/** Overlay per mostrare l' help messages. */
	    	$scope.helpTooltip;
	    	
	    	/** Il messaggio da visualizzare quando l'utente è in procinto di iniziare a disegnare. */
	    	$scope.startMsg = $translate.instant("OpenLayers.olMeasure.helpMsg");
	    	/** Messaggio da mostrare dopo che il primo punto di un poligono viene disegnato. */
	    	$scope.continuePolygonMsg = $translate.instant("OpenLayers.olMeasure.continuePolygonMsg");
	    	/** Messaggio da mostrare dopo che il primo punto viene disegnato. */
	    	$scope.continueCircleMsg = $translate.instant("OpenLayers.olMeasure.continueAzimutMsg");
			  
   /** ======================================================================================== **/
   /**  											MAPPA										**/
   /** ======================================================================================== **/
        	        	        		
        	/**
        	 * Inizializzo l'oggetto contenente le impostazioni di configurazione della mappa.
        	 */
        	$scope.olMapConfiguration = {
        		/** La projection con la quale l'entità sono gestite. **/
        		sourceProjection: appConstants.getParam("Constants").SOURCE_PROJECTION,
        		/** La projection con la quale l'entità sono disegnate in mappa. **/
        		destProjection: appConstants.getParam("Constants").DEST_PROJECTION,
        		/** Identificativo dell'elemento (div) in cui disegnare la mappa **/
        		targetMap: "mapRc",
        		/** Un controllo per disegnare la geometria di punti, linestring e poligoni sulla mappa **/
        		enableDrawGeometry: true
        	};
        	
        	/** 
        	 * Costruisco la mappa dalle configurazioni fornite di cui sopra.
        	 */
        	var olMaps = olBuildService.buildMapToOptions($scope.olMapConfiguration);
        	/**
        	 * Add instance to scope
        	 */
        	$scope.olMapRc = olMaps.getMap2DInstance();
    		
    		/**
    		 * Active tooltip on button map
    		 */
    		angular.element('.ol-zoom-in, .ol-zoom-out, .ol-zoom-extent button').tooltip({
    			  placement: 'right', delay: { "show": 0, "hide": 200 }
    		});
    		
  /** ======================================================================================= **/
  /**  											CONTROLLI									  **/
  /** ======================================================================================= **/
        	        
        	/** 
    		 * Aggiungo il controllo di openlayer che, se premuto, viene attivato lo strumento per disegnare su mappa
    		 * la geometria di un poligono.
    		 */
    		$scope.drawPolygonControl = olControlService.createDrawPolygonControl("ol-draw-polygon-small", "fa-m-polygon-small");
    		/** 
    		 * Aggiungo il controllo di openlayer che, se premuto, viene attivato lo strumento per disegnare su mappa
    		 * la geometria di un cerchio.
    		 */
    		$scope.drawCircleControl = olControlService.createDrawCircleControl("ol-draw-circle-small", "fa-m-circle-small");
    		/** 
    		 * Aggiungo il controllo di openlayer che, se premuto, viene attivato lo strumento di edit della geometria.
    		 */
    		$scope.modifyControl = olControlService.createModifyFeatureControl("ol-draw-modify-small", "fa-m-modify-small");
    		/** 
    		 * Aggiungo il controllo di openlayer che, se premuto, elimina la geometria disegnata.
    		 */
    		$scope.cancelControl = olControlService.createCancelDrawControl("ol-draw-cancel-small", "fa-m-cancel-small");
    		
  /** ======================================================================================== **/
  /**  											LAYER EDIT									   **/
  /** ======================================================================================== **/
    		        		
    		/**
    		 * Ritorna il layer vector appositamente configurato per la visualizzazione su mappa delle feature prodotte dagli strumenti di disegno.
    		 */
    		$scope.vector = olLayerService.createLayerVectorToDrawFeature();
    		/** add layer alla mappa **/
    		$scope.olMapRc.addLayers([$scope.vector]);
    		
  /** ======================================================================================== **/
  /**  									   INTERACTION DRAW POLYGON							   **/
  /** ======================================================================================== **/
    		          		
    		/**
    		 * Ritorna lo strumento di disegno appositamente configurato per tracciare poligoni su mappa.
    		 */
    		$scope.drawPolygonInteraction = olInteractionService.createDrawInteraction($scope.vector.getSource(), appConstants.getParam("ol.interaction.GeometryType").POLYGON);
    		/**
    		 * NOTA "ngeoDecorateInteraction":
    		 *   Fornisce una funzione che aggiunge una proprietà "active" (usando Object.defineProperty) ad una interaction, rendendo possibile 
    		 *   l'uso di ng-model per attivare / disattivare interazioni.
    		 */
    		ngeoDecorateInteraction($scope.drawPolygonInteraction);
    		/**
    		 * Aggiungo l'interaction alla mappa
    		 */
    		$scope.olMapRc.addInteraction($scope.drawPolygonInteraction);
    		/**
    		 * Provides a service to manage the activation of ngeo.toolActivate objects.
    		 * Each tool must be registered before using it.
    		 * Uno strumento verrà registrato in un gruppo identificato da un nome. Una volta registrato uno strumento può essere attivato
    		 * e disattivato. Quando si attiva uno strumento, tutti gli altri strumenti dello stesso gruppo saranno disattivati.
    		 */
    		var drawPolygonTool = new ngeo.ToolActivate($scope.drawPolygonInteraction, 'active');
    		ngeoToolActivateMgr.registerTool('mapTools', drawPolygonTool);
    	
  /** ======================================================================================== **/
  /**  										INTERACTION	DRAW CIRCLE							   **/
  /** ======================================================================================== **/
    		
    		/**
    		 * Ritorna lo strumento di disegno appositamente configurato per tracciare cerchi su mappa.
    		 */
    		$scope.drawCircleInteraction = olInteractionService.createDrawInteraction($scope.vector.getSource(), appConstants.getParam("ol.interaction.GeometryType").CIRCLE);
    		/**
    		 * NOTA "ngeoDecorateInteraction":
    		 *   Fornisce una funzione che aggiunge una proprietà "active" (usando Object.defineProperty) ad una interaction, rendendo possibile 
    		 *   l'uso di ng-model per attivare / disattivare interazioni.
    		 */
    		ngeoDecorateInteraction($scope.drawCircleInteraction);
    		/**
    		 * Aggiungo l'interaction alla mappa
    		 */
    		$scope.olMapRc.addInteraction($scope.drawCircleInteraction);
    		/**
    		 * Provides a service to manage the activation of ngeo.toolActivate objects.
    		 * Each tool must be registered before using it.
    		 * Uno strumento verrà registrato in un gruppo identificato da un nome. Una volta registrato uno strumento può essere attivato
    		 * e disattivato. Quando si attiva uno strumento, tutti gli altri strumenti dello stesso gruppo saranno disattivati.
    		 */
    		var drawCircleTool = new ngeo.ToolActivate($scope.drawCircleInteraction, 'active');
    		ngeoToolActivateMgr.registerTool('mapTools', drawCircleTool);
    		
  /** ======================================================================================== **/
  /**  									INTERACTION	MODIFY CIRCLE							   **/
  /** ======================================================================================== **/
    		    
    		/**
    		 * Ritorna lo strumento che gestisce la selezione dei dati vettoriali.
    		 */
    		$scope.selectInteraction = olInteractionService.createSelectDrawInteraction($scope.vector);
    		/**
    		 * Ritorna lo strumento di disegno appositamente configurato per tracciare cerchi su mappa.
    		 */
    		$scope.modifyInteraction = olInteractionService.createModifyInteraction($scope.selectInteraction);
    		$scope.modifyInteraction.setActive(true);
    		/**
    		 * NOTA "ngeoDecorateInteraction":
    		 *   Fornisce una funzione che aggiunge una proprietà "active" (usando Object.defineProperty) ad una interaction, rendendo possibile 
    		 *   l'uso di ng-model per attivare / disattivare interazioni.
    		 */
    		ngeoDecorateInteraction($scope.selectInteraction);
    		/**
    		 * Provides a service to manage the activation of ngeo.toolActivate objects.
    		 * Each tool must be registered before using it.
    		 * Uno strumento verrà registrato in un gruppo identificato da un nome. Una volta registrato uno strumento può essere attivato
    		 * e disattivato. Quando si attiva uno strumento, tutti gli altri strumenti dello stesso gruppo saranno disattivati.
    		 */
    		var modifyTool = new ngeo.ToolActivate($scope.selectInteraction, 'active');
    		ngeoToolActivateMgr.registerTool('mapTools', modifyTool);
       }]
	}
}]);
